﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LinkShareWpf.ViewModel;
using System.Windows;
using System.Collections.ObjectModel;
using UniCT.LinkShareWpf.Interface;
using UniCT.LinkShareWpf.Model;

namespace LinkShareWpf
{
    public class WindowHandler
    {
 
        #region Events
        public event EventHandler ReloadUserControlRequested;
        public event EventHandler UpdateResourcesRequest;
        #endregion
     
        #region Static
        private static WindowHandler instance = null;
        public static WindowHandler Instance
        {
            get
            {
                if (instance == null)
                    instance = new WindowHandler();
                return instance;
            }
        }
        #endregion

     

        public void ReloadUserControl(string sender)
        {
            ReloadUserControlRequested(this, new MessageParameterEventArgs(sender));
        }

        // Utilizzato per mostrare le nuove Window: Insert e Option
        public void ShowWindow(string name)
        {
        // A priori non appiamo quale tra le due tipologie di classi verrà istanziata
        // La classe Assembly permette di esplorare i metadati(informazioni aggiuntive relativamente al contenuto dell'assembly)
        // dell'assemply a runtime e recuperare in esso i tipi definiti.
            
           Window win = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("LinkShareWpf."+name) as Window;
         // GetExecutingAssembly(): torna un riferimento all'assemblu corrente in esecuzione
           win.ShowDialog();
        }
        
        //In questo caso si mostra la window di ShowWindow
        public void ShowWindow(ObservableCollection<Resource> allResources, Resource res, Type callerType)
        {
           Window win = new ShowResurce( allResources,  res, callerType);
           win.ShowDialog();
        }


        public void UpdateRequest()
        {
            UpdateResourcesRequest(this, EventArgs.Empty);
        }
     
        public class MessageParameterEventArgs : EventArgs
        {
            public String message;
            public MessageParameterEventArgs(String msg)
            {
                message = msg;
            }
        }

    }
}
